import { nextTick } from 'vue'

import { listDistrict } from "@/api/service/district"
import { listDept } from "@/api/system/dept"
import { listDeviceModel } from "@/api/service/deviceModel"
import { listBank } from "@/api/service/bank"
import { 
  provinceAndCityData,  // 省市二级联动数据(不带"全部"选项)
  regionData,          // 省市区三级联动数据(不带"全部"选项)
  pcTextArr,           // 省市联动数据(纯汉字)
  pcaTextArr,          // 省市区联动数据(纯汉字)
  codeToText          // 区域码转汉字对象
} from 'element-china-area-data'

// 查询数据参数
export const loadAllParams = reactive({
  pageNum: 1,
  pageSize: 10000,
});


// 城市选项
export const cityOptions = ref([])
// 区域选项
export const regionOptions = ref([])
export function handleProvinceChange(provinceName) { 
  // 根据选中的省份名称查找对应的省份对象
  const province = regionData.find(p => p.label === provinceName)

  // 如果找到了省份且有子级（城市）数据
  if (province && province.children) {
    // 更新城市选项为该省份下的城市列表
    cityOptions.value = province.children
  } else {
    // 如果没有找到或没有子级数据，则清空城市选项
    cityOptions.value = []
  }
}

export function handleCityChange(provinceName, cityName) {
  // 首先需要找到对应的省份，因为regionData是按省份->城市->区域的层级结构组织的
  //const provinceName = queryParams.value.province;
  if (!provinceName || !cityName) {
    regionOptions.value = [];
    return;
  }

  // 在regionData中查找对应的省份
  const province = regionData.find(p => p.label === provinceName);
  if (!province || !province.children) {
    regionOptions.value = [];
    return;
  }

  // 在省份的子级中查找对应的城市
  const city = province.children.find(c => c.label === cityName);
  if (!city || !city.children) {
    regionOptions.value = [];
    return;
  }

  // 更新区域选项为该城市下的所有区域
  regionOptions.value = city.children;
}




//机构级联菜单
import { listOrganization} from "@/api/service/organization"
// 级联选择器配置
export const cascaderProps = {
  value: 'id',
  label: 'orgName',
  children: 'children',
  expandTrigger: 'click',  //click hover
  checkStrictly: true,
  emitPath: false
}

export const organizationOptions = ref([])
export const allOrganizations = ref([]) // 保存所有机构信息用于查找父机构名称

/** 查询机构管理列表 */
export function getOrganizationList() {
     // 获取所有机构用于级联选择器
    listOrganization({}, false).then(responses => {
    // 构建级联选择器数据
    allOrganizations.value = responses.rows

    const allOrganizations2 = responses.rows
    organizationOptions.value = buildOrganizationTree(allOrganizations2)
  })
}

// 构建机构树形结构
function buildOrganizationTree(organizations) {
  // 创建映射表，以提高查找效率
  const orgMap = {}
  organizations.forEach(org => {
    orgMap[org.id] = { ...org, children: [] }
  })
  
  // 构建树形结构
  const roots = []
  organizations.forEach(org => {
    const orgNode = orgMap[org.id]
    if (!org.parentOrgId || !orgMap[org.parentOrgId]) {
      // 没有父节点或父节点不存在，则为根节点
      roots.push(orgNode)
    } else {
      // 有父节点，则添加到父节点的children中
      orgMap[org.parentOrgId].children.push(orgNode)
    }
  })
  //alert("organizations.length=" + organizations.length)
  //alert("roots.length=" + roots.length)
  return roots
}

// 根据ID获取父机构名称
export function getParentOrgName(parentOrgId) {
  if (!parentOrgId) {
    return ''
  }
  
  const parentOrg = allOrganizations.value.find(org => org.id === parentOrgId)
  return parentOrg ? parentOrg.orgName : parentOrgId
}

/** 查询区域列表 */
export const areaList = ref([]);
export function getAreaList() {
  listDistrict(loadAllParams).then(response => {
    areaList.value = response.rows;
  })
}

/** 查询部门列表 */
export const deptList = ref([]);
export function getDeptList() {
  listDept(loadAllParams).then(response => {
    deptList.value = response.data;
  })
}

/**
 * 处理表格选择变化，实现单选行为
 * @param {Array} selection - 当前选中的行数组
 * @param {Object} tableRef - 表格引用，用于清除选择和切换行选择状态
 * @returns {Object} 处理结果，包含选中的行和状态信息
 */
export function handleSingleSelection(selection, tableRef) {
  let currentSelected = null;
  
  // 如果选择了多个，则只保留最后一个
  if (selection.length > 1) {
    // 清除所有选择
    tableRef?.clearSelection()
    // 只选择最后一个
    tableRef?.toggleRowSelection(selection[selection.length - 1], true)
    selection = [selection[selection.length - 1]]
  }
  
  // 记录当前选择项
  if (selection.length === 1) {
    currentSelected = selection[0]
  }
  
  return {
    selectedItems: selection.map(item => item.id),
    selectedItem: currentSelected,
    isSingle: selection.length === 1,
    isEmpty: selection.length === 0
  }
}

/**
 * 处理表格选中项高亮显示，获取选中项，用于选择器回显已选中内容
 * @param {Object} tableRef - 表格引用
 * @param {Array} dataList - 数据列表
 * @param {Object} selectedItem - 选中项
 */
export function handleSelectionHighlight(tableRef, dataList, selectedItem) {
  if (selectedItem && selectedItem.id && tableRef && tableRef.value) {
    const item = dataList.find(data => data.id === selectedItem.id);
    if (item) {
      nextTick(() => {
        tableRef.value.toggleRowSelection(item, true);
      });
    }
  }
}

// 设备型号列表
export const deviceModelList = ref([]);
/** 查询设备型号列表 */
export function getDeviceModelList() {
  listDeviceModel(loadAllParams).then(response => {
    deviceModelList.value = response.rows;
  })
}

// 银行列表
export const bankList = ref([]);
/** 查询银行列表 */
export function getBankList() {
  listBank(loadAllParams).then(response => {
    bankList.value = response.rows;
  })
}

